Command (ddd)
DDDの文脈のCommand
CQRSにおけるCと同じ意味合い
Commandパターンとは関係ないmrsekut.icon
Domain Eventを起こすための誰かの要求のこと
人や、他のDomain Eventによって引き起こされる
この図がわかりやすい
https://gyazo.com/85cb0ce6415fef89c7303da985f5d09eGyazoの画像ロック.icon
/mrsekut-book-4048931164/028
Commandによって、Workflow (ddd)が引き起こされる
Commandは、あるworkflowがリクエストを処理するために必要な全てのものを含む
e.g. コマンドの作成者、タイムスタンプなど
具体的な実装としては、Command Bus Patternとか?mrsekut.icon
workflow (DDD)の結果としてEventsが出力される
更にDomain Eventが別のCommandを引き起こす
Commandは常に成功するわけではない
もし処理が成功すれば、システムの状態が変化し、1つ以上のDomain Eventが記録される
命名
命令形にする
table:例
↓Command ↓Domain Event
〇〇する 〇〇された・〇〇した
Make X happen X happened
Place an order Order placed
Commandによって、対応するDomain Eventが生じる
project内のCommandは共通するフィールドを持つこともある
genericsを使った型を用意すると良い
code:ts
type Command<Data> = {
data: Data;
timestamp: Date;
userId: UserId;
...
}
本当にこんな汎用型を用意して上手くいくのか?とちょっと思っているmrsekut.icon
userIdとか常に必要になるとは限らなくない?
完全なグローバルではなく、「Orderの文脈」での共通の型を用意する感じ?
/mrsekut-book-97816805025/136
参考
/mrsekut-book-4048931164/028~
解説、具体例など、図解もある
/mrsekut-book-97816805025/135~